complex.h

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Стандартная библиотека
языка программирования С

complex.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляются функции для комплексной арифметики. Эти функции используют встроенный тип complex, который появился в стандарте C99.[1]

Макросы и типы данных

Файл определяет следующие макросы и типы данных:

#define complex _Complex
#define _Complex_I const float _Complex
#define imaginary _Imaginary
#define _Imaginary_I const float _Imaginary
#define I

для работы с комплексными и мнимыми числами. Макросы imaginary должны быть объявлены только если платформа поддерживает работу с мнимыми числами (Опциональная часть стандарта C99 "Annex G").

Макрос I раскрывается либо в _Imaginary_I либо в _Complex_I. В отличие от обычного запрещения переопределений библиотечных макросов стандарт разрешает переопределять I, complex и imaginary.[1]

Директивы компилятора

Стандарт C99 описывает следующую директиву компилятора (прагму), используемую при работе с комплексными числами:

#include <complex.h>
#pragma STDC CX_LIMITED_RANGE on/off

Обычные математические формулы для комплексного умножения, деления и нахождения абсолютного значения проблематичны из-за бесконечности и переполнения. Эта директива уведомляет (при флаге on) среду о том, что можно использовать обычные математические формулы.[1] Цель этой директивы - разрешить окружению использовать следующие функции:

[math]\displaystyle{ (x+iy)(u+iv)=(xu-yv)+i(yu+xv)\, }[/math]

[math]\displaystyle{ (x+iy)/(u+iv)=[(xu+yv)+i(yu-xv)]\div(u^2+v^2)\, }[/math]

[math]\displaystyle{ \mid x+iy \mid = \sqrt{x^2+y^2} }[/math]

если программист считает их безопасными.

Функции

Тригонометрические

Функции в заголовочном файле complex.h представлены для трёх типов — double, float и long double (значения представлены в радианах):

#include <complex.h>
double complex cacos (double complex z);
float complex cacosf (float complex z);
long double complex cacosl (long double complex z);
double complex casin (double complex z);
float complex casinf (float complex z);
long double complex casinl (long double complex z);
double complex catan (double complex z);
float complex catanf (float complex z);
long double complex catanl (long double complex z);
double complex ccos  (double complex z);
float complex ccosf (float complex z);
long double complex ccosl (long double complex z);
double complex csin (double complex z);
float complex csinf (float complex z);
long double complex csinl (long double complex z);
double complex ctan(double complex z);
float complex ctanf(float complex z);
long double complex ctanl(long double complex z);

для вычисления тригонометрических значений синуса, косинуса, тангенса и котангенса для комплексных чисел.

Гиперболические

#include <complex.h>
double complex cacosh(double complex z);
float complex cacoshf(float complex z);
long double complex cacoshl(long double complex z);
double complex casinh(double complex z);
float complex casinhf(float complex z);
long double complex casinhl(long double complex z);
double complex catanh(double complex z);
float complex catanhf(float complex z);
long double complex catanhl(long double complex z);
double complex ccosh(double complex z);
float complex ccoshf(float complex z);
long double complex ccoshl(long double complex z);
double complex csinh(double complex z);
float complex csinhf(float complex z);
long double complex csinhl(long double complex z);
double complex ctanh(double complex z);
float complex ctanhf(float complex z);
long double complex ctanhl(long double complex z);

Функции вычисляют гиперболический косинус, синус, тангенс, котангенс для комплексных чисел.[1]

Экспоненциальные и логарифмические

double complex cexp(double complex z);
float complex cexpf(float complex z);
long double complex cexpl(long double complex z);
double complex clog(double complex z);
float complex clogf(float complex z);
long double complex clogl(long double complex z);

Функции вычисляют логарифм и экспоненту для комплексных чисел.

Степенные и абсолютные

#include <complex.h>
double cabs(double complex z);
float cabsf(float complex z);
long double cabsl(long double complex z);
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x,
long double complex y);
double complex csqrt(double complex z);
float complex csqrtf(float complex z);
long double complex csqrtl(long double complex z);

Функции вычисляют абсолютное значение и корень для комплексных чисел.

Управляющие

#include <complex.h>
double carg(double complex z);
float cargf(float complex z);
long double cargl(long double complex z);
double cimag(double complex z);
float cimagf(float complex z);
long double cimagl(long double complex z);
double complex conj(double complex z);
float complex conjf(float complex z);
long double complex conjl(long double complex z);
double complex cproj(double complex z);
float complex cprojf(float complex z);
long double complex cprojl(long double complex z);
double creal(double complex z);
float crealf(float complex z);
long double creall(long double complex z);

Функции семейства carg возвращают значение аргумента комплексного числа z на интервале [math]\displaystyle{ [-\pi; +\pi] }[/math].[1] Функции семейства cimag возвращают мнимую часть числа z. Функции семейства creal возвращают действительную часть числа z.

Ссылки

Примечания

  1. 1,0 1,1 1,2 1,3 1,4 ISO/IEC 9899:1999. Дата обращения: 31 июля 2011. Архивировано 22 августа 2011 года.